Python 调用 C语言模块
python不擅长"大量运算"任务,python程序优势在于:编写简单,适合"IO密集型作业"(比如打开文件,下载图片,运行脚本)。python作为知名的"胶水语言",快速实现"计算密集型作业"的方法就是"把 c 的代码拿过来直接用"。
pybind11
pybind11 是一个用于创建 Python 绑定的 C++ 库,它使得在 C++ 中编写 Python 模块变得非常简单。pybind11 是一个轻量级的头文件库,不需要额外的构建步骤或依赖项。它支持 Python 2.7 和 3.x,以及 PyPy。
pip install pybind11
使用 pybind11 编译生成的 .pyd 文件(在 Windows 上,对应的在 Linux 或 macOS 上是 .so 文件)实际上是一个 Python 模块。要在 Python 中使用这个模块,你需要执行以下步骤:
-
确保
.pyd文件在 Python 的搜索路径中:Python 导入模块时会在一系列路径中搜索这个模块。你可以通过修改环境变量PYTHONPATH或者在 Python 代码中修改sys.path来确保 Python 能找到你的模块。另外一种简单的方式是将.pyd文件放在你的脚本所在的目录中。 -
导入模块:一旦
.pyd文件位于 Python 的搜索路径中,你就可以像导入任何其他 Python 模块一样导入它。如果你的.pyd文件名为example.pyd,你只需要在 Python 中使用import example。 -
使用模块中的功能:导入模块后,你就可以使用其提供的函数、类等。
下面是一个简单的示例:
假设你有一个名为 example.pyd 的模块,其中定义了一个函数 add 和一个类 Pet。
# 确保 example.pyd 在当前目录或者 PYTHONPATH 中
import example
# 使用 example 模块中的函数
result = example.add(1, 2)
print(result)
# 创建 example 模块中定义的类的实例
my_pet = example.Pet("Fido")
print(my_pet.name)
如果你遇到导入错误或者其他问题,请检查以下几点:
- 确保
.pyd文件没有被损坏,并且是为你的 Python 版本和架构正确编译的。 - 确保所有必要的依赖项都已安装,包括与
.pyd文件相关的任何外部库。 - 如果你在导入时收到特定的错误消息,例如找不到模块或者符号解析错误,这可能指示了路径问题或者依赖项问题,需要根据错误消息来解决。
通过这些步骤,你应该能够成功地在 Python 中使用通过 pybind11 生成的模块。